﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LogicaNegocio;
using Entities;
namespace Presentacion
{
    public partial class ConsultarClientes : System.Web.UI.Page
    {
        private static string op;
        private GestorClientes gClientes;
        private GestorTipoDocumentos gTipoDocumento;
        private GestorSeguridad gSeguridad;
        private static bool esFiltrada = false;
        private bool validarRolUsuario()
        {
            gSeguridad = new GestorSeguridad();
            string[] lstroles = gSeguridad.ObtenerRoles(HttpContext.Current.User.Identity.Name.ToString()).Split('|');
            if (lstroles != null && lstroles.Length > 0)
            {
                foreach (string item in lstroles)
                {
                    if (item == "Admin" || item == "Usuario" || item == "SuperUser")
                    {
                        return true;
                    }
                }
            }
            return false;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Page.Title = "Consultar Clientes";
                //ViewState["Orden"] = "idCliente";
                CargarTipoDocumento();
                cargarGrillaClientes();
                ddlTipoDocumento.SelectedIndex = -1;
                op = Request.QueryString["op"].ToString();
                if (!validarRolUsuario())
                {
                    if (op!="cons")
                        Response.Redirect("~/AccesoNoAutorizado.aspx");
                    else
                        grdClientes.Enabled = false;
                }
            }
            Page.Title = "Consultar Clientes";
        }
        private void CargarTipoDocumento()
        {
            try
            {
                gTipoDocumento = new GestorTipoDocumentos();
                ddlTipoDocumento.DataSource = gTipoDocumento.ObtenerTodos();
                ddlTipoDocumento.DataTextField = "nombre";
                ddlTipoDocumento.DataValueField = "idTipoDoc";
                ddlTipoDocumento.DataBind();
                ddlTipoDocumento.Items.Insert(0, new ListItem("<Seleccione un Item>", "0"));
                if (ddlTipoDocumento.Items.Count == 0)
                {
                    ddlTipoDocumento.DataSource = null;
                    ddlTipoDocumento.Items.Clear();
                }
            }
            catch (Exception ex)
            {
                lblError.Text = "Hubo un problema al cargar los tipos de documentos";
                lblMensajeError.Text = ex.Message;
                //Console.Write("ERROR: " + ex.Message);
            }
        }
        private void cargarGrillaClientes()
        {
            try
            {
                esFiltrada = false;
                grdClientes.DataSource = null;
                gClientes = new GestorClientes();
                gTipoDocumento = new GestorTipoDocumentos();
                Tipo_Documento aux = null;
                List<Cliente> lstClientes = gClientes.ObtenerTodos();
                if (lstClientes != null)
                {
                    foreach (Cliente item in lstClientes)
                    {
                        aux = gTipoDocumento.BuscarPorId(item.IdTipoDocumento);
                        if (aux != null)
                            item.TipoDocumento = aux.Nombre;
                        else
                            item.TipoDocumento = "Sin Datos";
                    }
                    grdClientes.DataSource = lstClientes;
                    string[] claves = { "idCliente" };
                    grdClientes.DataKeyNames = claves;
                    grdClientes.DataBind();
                }
                else
                {
                    grdClientes.DataSource = null;
                    grdClientes.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //grdClientes.DataSource = null;
            //gClientes = new GestorClientes();
            //gTipoDocumento=new GestorTipoDocumentos();
            //Tipo_Documento aux = null;
            //List<Cliente> lstClientes = gClientes.ObtenerTodos();
            //if (lstClientes!=null)
            //{
            //    foreach (Cliente item in lstClientes)
            //    {
            //        aux = gTipoDocumento.BuscarPorId(item.IdTipoDocumento);
            //        if (aux != null)
            //            item.TipoDocumento = aux.Nombre;
            //        else
            //            item.TipoDocumento = "Sin Datos";
            //    }
            //    grdClientes.DataSource = lstClientes;
            //    string[] claves = { "idCliente" };
            //    grdClientes.DataKeyNames = claves;
            //    grdClientes.DataBind();
            //}
            //else
            //{
            //    grdClientes.DataSource = null;
            //    grdClientes.DataBind();
            //}
        }
        private void cargarGrillaClientesFiltrada()
        {
            try
            {
                esFiltrada = true;
                int? idCli = null;
                string nombreCliente = null;
                string apellidoCliente = null;
                int? nroDoc = null;
                int? tipoDoc = null;
                gClientes = new GestorClientes();
                gTipoDocumento = new GestorTipoDocumentos();


                if (!string.IsNullOrEmpty(txtLegajo.Text))
                    idCli = Convert.ToInt32(txtLegajo.Text);
                if (!string.IsNullOrEmpty(txtApellidoCliente.Text))
                    apellidoCliente = txtApellidoCliente.Text;
                if (!string.IsNullOrEmpty(txtNombreCliente.Text))
                    nombreCliente = txtNombreCliente.Text;
                if (ddlTipoDocumento.SelectedIndex >= 1)
                    tipoDoc = Convert.ToInt32(ddlTipoDocumento.SelectedValue.ToString());
                if (!string.IsNullOrEmpty(txtNroDocumento.Text))
                    nroDoc = Convert.ToInt32(txtNroDocumento.Text);
                gClientes = new GestorClientes();
                List<Cliente> lstClientes = gClientes.ObtenerTodosClientes(nombreCliente, apellidoCliente, nroDoc, tipoDoc, idCli);
                if (lstClientes != null)
                {
                    foreach (Cliente item in lstClientes)
                    {
                        item.TipoDocumento = gTipoDocumento.BuscarPorId(item.IdTipoDocumento).Nombre;
                    }
                    grdClientes.DataSource = lstClientes;
                    string[] claves = { "idCliente" };
                    grdClientes.DataKeyNames = claves;
                    grdClientes.DataBind();
                }
                else
                {
                    grdClientes.DataSource = null;
                    grdClientes.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //int? idCli = null;
            //string nombreCliente = null;
            //string apellidoCliente=null;
            //int? nroDoc = null;
            //int? tipoDoc = null;
            //gClientes = new GestorClientes();
            //gTipoDocumento = new GestorTipoDocumentos();


            //if (!string.IsNullOrEmpty(txtLegajo.Text))
            //    idCli = Convert.ToInt32(txtLegajo.Text);
            //if (!string.IsNullOrEmpty(txtApellidoCliente.Text))
            //    apellidoCliente = txtApellidoCliente.Text;
            //if (!string.IsNullOrEmpty(txtNombreCliente.Text))
            //    nombreCliente = txtNombreCliente.Text;
            //if (ddlTipoDocumento.SelectedIndex>=1)
            //    tipoDoc = Convert.ToInt32(ddlTipoDocumento.SelectedValue.ToString());
            //if (!string.IsNullOrEmpty(txtNroDocumento.Text))
            //    nroDoc = Convert.ToInt32(txtNroDocumento.Text);
            //gClientes = new GestorClientes();
            //List<Cliente> lstClientes = gClientes.ObtenerTodosClientes(nombreCliente, apellidoCliente, nroDoc, tipoDoc);
            //if (lstClientes!=null)
            //{
            //    foreach (Cliente item in lstClientes)
            //    {
            //        item.TipoDocumento = gTipoDocumento.BuscarPorId(item.IdTipoDocumento).Nombre;
            //    }
            //    grdClientes.DataSource = lstClientes;
            //    string[] claves = { "idCliente" };
            //    grdClientes.DataKeyNames = claves;
            //    grdClientes.DataBind();
            //}
            //else
            //{
            //    grdClientes.DataSource = null;
            //    grdClientes.DataBind();
            //}
        }

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            cargarGrillaClientesFiltrada();
        }

        protected void grdClientes_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                int idCli = (int)grdClientes.SelectedDataKey[0];
                op = Request.QueryString["op"].ToString();
                if (op.Equals("buscar"))
                {
                    gClientes = new GestorClientes();
                    gTipoDocumento = new GestorTipoDocumentos();
                    Cliente cli = gClientes.BuscarPorId(idCli);
                    if (cli != null)
                    {
                        cli.TipoDocumento = gTipoDocumento.BuscarPorId(cli.IdTipoDocumento).Nombre;
                        Session["ClienteSelect"] = cli;
                        Response.Redirect("~/Ventas/Ventas.aspx");
                    }
                }
                else
                    Response.Redirect("ABMClientes.aspx?idCliente=" + idCli + "&op=" + op);
                //Response.Redirect("ABMProductos.aspx?idProducto=" + idProd + "&op=" + op);

            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //int idCli = (int)grdClientes.SelectedDataKey[0];
            //op = Request.QueryString["op"].ToString();
            //if (op.Equals("buscar"))
            //{
            //    gClientes = new GestorClientes();
            //    gTipoDocumento = new GestorTipoDocumentos();
            //    Cliente cli = gClientes.BuscarPorId(idCli);
            //    if (cli != null)
            //    {
            //        cli.TipoDocumento = gTipoDocumento.BuscarPorId(cli.IdTipoDocumento).Nombre;
            //        Session["ClienteSelect"] = cli;
            //        Response.Redirect("~/Ventas/Ventas.aspx");
            //    }
            //}
            //else
            //    Response.Redirect("ABMClientes.aspx?idCliente="+idCli+"&op="+op);
            //    //Response.Redirect("ABMProductos.aspx?idProducto=" + idProd + "&op=" + op);
        }

        protected void grdClientes_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdClientes.PageIndex = e.NewPageIndex;
            if (esFiltrada)
                cargarGrillaClientesFiltrada();
            else
                cargarGrillaClientes();
        }

        protected void grdClientes_Sorting(object sender, GridViewSortEventArgs e)
        {
            ViewState["Orden"] = e.SortExpression;
            if (ViewState["Direccion"]!=null)
            {
                if (ViewState["Direccion"].ToString() == "DESC")
                    ViewState["Direccion"] = "ASC";
                else
                    ViewState["Direccion"] = "DESC";
            }
            else if (e.SortDirection.ToString() == "Ascending")
            {
                ViewState["Direccion"] = "ASC";
            }
            //ViewState["Direccion"] = e.SortDirection;
            if (esFiltrada)
                cargarGrillaClientesFiltradaSort();
            else
                cargarGrillaClientesSort();
        }
        private void cargarGrillaClientesSort()
        {
            try
            {
                esFiltrada = false;
                grdClientes.DataSource = null;
                gClientes = new GestorClientes();
                gTipoDocumento = new GestorTipoDocumentos();
                Tipo_Documento aux = null;
                List<Cliente> lstClientes = gClientes.ObtenerTodosOrdenados(ViewState["Orden"].ToString(), ViewState["Direccion"].ToString());
                if (lstClientes != null)
                {
                    foreach (Cliente item in lstClientes)
                    {
                        aux = gTipoDocumento.BuscarPorId(item.IdTipoDocumento);
                        if (aux != null)
                            item.TipoDocumento = aux.Nombre;
                        else
                            item.TipoDocumento = "Sin Datos";
                    }
                    grdClientes.DataSource = lstClientes;
                    string[] claves = { "idCliente" };
                    grdClientes.DataKeyNames = claves;
                    grdClientes.DataBind();
                }
                else
                {
                    grdClientes.DataSource = null;
                    grdClientes.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //grdClientes.DataSource = null;
            //gClientes = new GestorClientes();
            //gTipoDocumento=new GestorTipoDocumentos();
            //Tipo_Documento aux = null;
            //List<Cliente> lstClientes = gClientes.ObtenerTodos();
            //if (lstClientes!=null)
            //{
            //    foreach (Cliente item in lstClientes)
            //    {
            //        aux = gTipoDocumento.BuscarPorId(item.IdTipoDocumento);
            //        if (aux != null)
            //            item.TipoDocumento = aux.Nombre;
            //        else
            //            item.TipoDocumento = "Sin Datos";
            //    }
            //    grdClientes.DataSource = lstClientes;
            //    string[] claves = { "idCliente" };
            //    grdClientes.DataKeyNames = claves;
            //    grdClientes.DataBind();
            //}
            //else
            //{
            //    grdClientes.DataSource = null;
            //    grdClientes.DataBind();
            //}
        }
        private void cargarGrillaClientesFiltradaSort()
        {
            try
            {
                esFiltrada = true;
                int? idCli = null;
                string nombreCliente = null;
                string apellidoCliente = null;
                int? nroDoc = null;
                int? tipoDoc = null;
                gClientes = new GestorClientes();
                gTipoDocumento = new GestorTipoDocumentos();
                if (!string.IsNullOrEmpty(txtLegajo.Text))
                    idCli = Convert.ToInt32(txtLegajo.Text);
                if (!string.IsNullOrEmpty(txtApellidoCliente.Text))
                    apellidoCliente = txtApellidoCliente.Text;
                if (!string.IsNullOrEmpty(txtNombreCliente.Text))
                    nombreCliente = txtNombreCliente.Text;
                if (ddlTipoDocumento.SelectedIndex >= 1)
                    tipoDoc = Convert.ToInt32(ddlTipoDocumento.SelectedValue.ToString());
                if (!string.IsNullOrEmpty(txtNroDocumento.Text))
                    nroDoc = Convert.ToInt32(txtNroDocumento.Text);
                gClientes = new GestorClientes();
                List<Cliente> lstClientes = gClientes.ObtenerTodosClientesFiltradosOrdenados(nombreCliente, apellidoCliente, nroDoc, tipoDoc, ViewState["Orden"].ToString(), ViewState["Direccion"].ToString());
                if (lstClientes != null)
                {
                    foreach (Cliente item in lstClientes)
                    {
                        item.TipoDocumento = gTipoDocumento.BuscarPorId(item.IdTipoDocumento).Nombre;
                    }
                    grdClientes.DataSource = lstClientes;
                    string[] claves = { "idCliente" };
                    grdClientes.DataKeyNames = claves;
                    grdClientes.DataBind();
                }
                else
                {
                    grdClientes.DataSource = null;
                    grdClientes.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMensajeError.Text = ex.Message;
            }
            //int? idCli = null;
            //string nombreCliente = null;
            //string apellidoCliente=null;
            //int? nroDoc = null;
            //int? tipoDoc = null;
            //gClientes = new GestorClientes();
            //gTipoDocumento = new GestorTipoDocumentos();


            //if (!string.IsNullOrEmpty(txtLegajo.Text))
            //    idCli = Convert.ToInt32(txtLegajo.Text);
            //if (!string.IsNullOrEmpty(txtApellidoCliente.Text))
            //    apellidoCliente = txtApellidoCliente.Text;
            //if (!string.IsNullOrEmpty(txtNombreCliente.Text))
            //    nombreCliente = txtNombreCliente.Text;
            //if (ddlTipoDocumento.SelectedIndex>=1)
            //    tipoDoc = Convert.ToInt32(ddlTipoDocumento.SelectedValue.ToString());
            //if (!string.IsNullOrEmpty(txtNroDocumento.Text))
            //    nroDoc = Convert.ToInt32(txtNroDocumento.Text);
            //gClientes = new GestorClientes();
            //List<Cliente> lstClientes = gClientes.ObtenerTodosClientes(nombreCliente, apellidoCliente, nroDoc, tipoDoc);
            //if (lstClientes!=null)
            //{
            //    foreach (Cliente item in lstClientes)
            //    {
            //        item.TipoDocumento = gTipoDocumento.BuscarPorId(item.IdTipoDocumento).Nombre;
            //    }
            //    grdClientes.DataSource = lstClientes;
            //    string[] claves = { "idCliente" };
            //    grdClientes.DataKeyNames = claves;
            //    grdClientes.DataBind();
            //}
            //else
            //{
            //    grdClientes.DataSource = null;
            //    grdClientes.DataBind();
            //}
        }
    }
}